package com.smart.community.work.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.smart.community.commons.base.BaseEntity;

import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * 安保事件实体类
 * 
 * 严格按照《Java后端SpringBoot代码开发规范_重构版.md》Entity规范实现：
 * - 继承BaseEntity：获得标准字段（id、createTime、updateTime、createBy、updateBy、version、deleted）
 * - 功能单一原则：Entity类必须是单纯的数据库字段映射的Bean对象，功能必须单一
 * - 禁止枚举类：所有枚举字段都使用String类型存储，避免使用枚举类
 * - 禁止工具方法：只保留基本的getter/setter方法，禁止添加工具方法
 * - 完整注释：所有字段都有完整的JavaDoc注释
 * - 字段映射：使用@TableField注解正确映射数据库字段
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 * @version 1.0.0
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("sc_security_event")
public class SecurityEvent extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 事件类型：suspicious-可疑人员，damage-设施损坏，fire-消防隐患，other-其他
     */
    @TableField("event_type")
    private String eventType;

    /**
     * 严重程度：1-一般，2-重要，3-紧急
     */
    @TableField("severity")
    private Integer severity;

    /**
     * 事件标题
     */
    @TableField("title")
    private String title;

    /**
     * 事件描述
     */
    @TableField("description")
    private String description;

    /**
     * 事件地点
     */
    @TableField("location")
    private String location;

    /**
     * 报告人ID
     */
    @TableField("reporter_id")
    private Long reporterId;

    /**
     * 处理人ID
     */
    @TableField("handler_id")
    private Long handlerId;

    /**
     * 事件发生时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("event_time")
    private LocalDateTime eventTime;

    /**
     * 处理时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("handle_time")
    private LocalDateTime handleTime;

    /**
     * 处理结果
     */
    @TableField("handle_result")
    private String handleResult;

    /**
     * 现场照片（JSON格式存储文件信息）
     */
    @TableField("photos")
    private String photos;

    /**
     * 状态：1-待处理，2-处理中，3-已处理，4-已关闭
     */
    @TableField("status")
    private Integer status;
}
